//package github.sf.fw.tools.spi;
//
//import sun.misc.URLClassPath;
//
//import java.io.File;
//import java.io.IOException;
//import java.net.URL;
//import java.nio.file.Path;
//import java.nio.file.Paths;
//import java.util.ArrayList;
//import java.util.Enumeration;
//import java.util.List;
//
//public class SpiClassLoader extends ClassLoader {
//    private static final String PREFIX = "META-INF/services/";
//    private String rootDir;
//
//    /**
//     * 重写ClassLoader的findResources而不是getResources方法</br>
//     * 是为了防止使用SpiClassLoader时，无法扫描到项目默认类路径下的jar包
//     *
//     * @param name The resource name
//     * @return
//     * @throws IOException
//     */
//    @Override
//    protected Enumeration<URL> findResources(String name) throws IOException {
//        if (rootDir == null || "".equals(rootDir)) {
//            return super.findResources(name);
//        }
//        Path path = Paths.get(rootDir);
//        if (!path.toFile().exists()) {
//            //防止后续无意义的遍历查询
//            return java.util.Collections.emptyEnumeration();
//        }
//        File[] files = path.toFile().listFiles();
//        if (files == null) {
//            //防止后续无意义的遍历查询
//            return java.util.Collections.emptyEnumeration();
//        }
//        List<URL> urlList = new ArrayList<>(16);
//        //只扫描指定目录的第一层
//        for (File file : files) {
//            if (file.isFile() && file.getName().endsWith(".jar")) {
//                URL url = new URL("file:///" + file.getAbsolutePath());
//                urlList.add(url);
//            }
//        }
//        //防止后续无意义的遍历查询
//        if (urlList.isEmpty()) {
//            return java.util.Collections.emptyEnumeration();
//        }
//        URL[] urls = urlList.toArray(new URL[0]);
//        URLClassPath urlClassPath = new URLClassPath(urls);
//        return urlClassPath.findResources(name, false);
//    }
//
//    public String getRootDir() {
//        return rootDir;
//    }
//
//    public void setRootDir(String rootDir) {
//        this.rootDir = rootDir;
//    }
//}
